home *** CD-ROM | disk | FTP | other *** search
/ Palm Utilities / Palm_Utilities_CD-ROM_2001_2001.iso / files / utils sync / JetSync 1.0 / jetsync-1.0.exe / jetsync-1.0 / src / jetsync < prev    next >
Encoding:
Text File  |  1999-10-25  |  40.3 KB  |  1,580 lines

  1. #! /bin/sh
  2. # 1 2 3... \
  3. exec @@JETHOME@@/bin/jetsync.exe $0 ${1+$@} -geometry +179+225
  4.  
  5. set JETHOME @@JETHOME@@
  6. set USER ""
  7. set SPLASH_SCREEN 1
  8. set IMAGEDIR $JETHOME/images
  9. set anim_x 90
  10. set anim_tag 0
  11. set anim_dir 20
  12. set daemon_flag -1
  13. set child_pid -1
  14.  
  15. set USER [whoami $JETHOME]
  16.  
  17. if {[string compare $USER "NULL"]} {
  18.   if { ![file exists $JETHOME/$USER/conf/color.def]} {
  19.     puts "User $USER does not exist! This means an installation error has"
  20.     puts "ocurred.\n"
  21.     puts "Please replace the username in the file \"$JETHOME/conf/prefs\"."
  22.     exit
  23.   }
  24.  
  25.   source $JETHOME/$USER/conf/color.def
  26.   wm title . "JetSync - $USER"
  27. } else {
  28.   source $JETHOME/default/color.def
  29.   wm title . "JetSync"
  30. }
  31.  
  32.  
  33. # recalculates the colors for all widgets in app
  34. proc calc_Palette {} {
  35.   global FORE BACK
  36.  
  37.   tk_setPalette \
  38. foreground $FORE background $BACK \
  39. activeforeground $FORE activebackground $BACK
  40. }
  41.  
  42.                               ### Splash screen ###
  43. # updates the content of the splash screen
  44. proc update_splash { name } {
  45.   global SPLASH_SCREEN
  46.  
  47.   if { !$SPLASH_SCREEN } return
  48.   
  49.   if [ string compare $name "" ] {
  50.     .sbottom.l1 configure -text "$name..."
  51.   } else {
  52.     .sbottom.l1 configure -text ""
  53.   }
  54.   update
  55.   after 300
  56. }
  57.  
  58.  
  59. # given a toplevel window name and its width, center the window
  60. # on the screen. If winH and winW are not specified as -1 the window
  61. # will also be resized to those values
  62. proc center_window { name winW winH } {
  63.   set h [winfo screenheight .]
  64.   set w [winfo screenwidth .]
  65.  
  66.   if {$winW == -1 } {
  67.     update
  68.     set winW [winfo width $name]
  69.   }
  70.   if {$winH == -1 } {
  71.     update
  72.     set winH [winfo height $name]
  73.   }
  74.   set y [expr ($h - $winH) / 2]
  75.   set x [expr ($w - $winW) / 2]
  76.   wm geometry $name ${winW}x${winH}+${x}+${y}
  77. }
  78.  
  79.  
  80. if { $SPLASH_SCREEN } {
  81.   center_window . 256 383
  82.   frame .stop
  83.   frame .sbottom
  84.   frame .sbottom2
  85.  
  86.   image create photo splash -file [file join $IMAGEDIR palm.gif]
  87.   label .stop.l1 -image splash
  88.  
  89.   label .sbottom.l1 -text "Starting up..." -anchor c
  90.  
  91.   label .sbottom2.l1 -text "Miguel Frias"
  92.   label .sbottom2.l2 -text "Joaquim Agostinho"
  93.   pack .stop -side top -fill x
  94.   pack .sbottom -pady 10 -anchor c
  95.   pack .sbottom2 -side top -fill x -pady 20
  96.   pack .stop.l1
  97.   pack .sbottom.l1
  98.   pack .sbottom2.l1 .sbottom2.l2 -side top
  99.  
  100.   update_splash "Starting up"
  101. }
  102.  
  103.  
  104. calc_Palette
  105. update_splash "Initializing JetSync"
  106.  
  107.                           ### Generic settings ###
  108. set show_d_path ""
  109. set show_d_status ""
  110. set modem_dev_port "/dev/cua0"
  111. set modem_dev_speed "9600"
  112. set modem_dev_type ""
  113. set modem_dev_str ""
  114. set local_dev_port "/dev/cua0"
  115. set local_dev_speed "9600"
  116. set env(PILOTPORT) /dev/cua0
  117. set env(PILOT_PORT) /dev/cua0
  118. set env(PILOTRATE) 19200
  119. set env(PILOT_RATE) 19200
  120. set env(PILOTHIGHRATE) 19200
  121. set hotsync_opt 0
  122. set chpass_old ""
  123. set chpass_new ""
  124. set new_user ""
  125. set new_pass ""
  126. set CONDUIT_FILE conduits.def
  127. set JETUSERS_FILE jetusers
  128. set hsa_conduits ""
  129. set seed [expr [clock seconds] % 10]
  130.  
  131.  
  132. # show the get-file tcl/tk dialog and return the seleceted filename
  133. proc tk_get_file {} {
  134.   return [tk_getOpenFile -title "File to upload to Pilot" \
  135.           -filetypes {{{Pilot Resource Code} {.prc}}}]
  136. }
  137.  
  138.  
  139.  
  140. # load modem and local device data (port and speed mainly)
  141. proc load_devices {} {
  142.   global JETHOME local_dev_port local_dev_speed
  143.   global modem_dev_type modem_dev_str modem_dev_port modem_dev_speed
  144.   global daemon_flag child_pid
  145.  
  146.   set fp [open $JETHOME/conf/prefs r]
  147.  
  148. # ignore first two lines (PCID, USER)
  149.   gets $fp line
  150.   gets $fp line
  151.  
  152. # read values
  153.   gets $fp line
  154.   set modem_dev_port [lindex [split $line ":"] 1]
  155.   gets $fp line
  156.   set modem_dev_speed [lindex [split $line ":"] 1]
  157.   gets $fp line
  158.   set modem_dev_type [lindex [split $line ":"] 1]
  159.   gets $fp line
  160.   set modem_dev_str [lindex [split $line ":"] 1]
  161.   gets $fp line
  162.   set local_dev_port [lindex [split $line ":"] 1]
  163.   gets $fp line
  164.   set local_dev_speed [lindex [split $line ":"] 1]
  165.   gets $fp line
  166.   set daemon_flag [lindex [split $line ":"] 1]
  167.   set child_pid [lindex [split $line ":"] 2]
  168.   close $fp
  169.  
  170.   set env(PILOTPORT) $local_dev_port
  171.   set env(PILOT_PORT) $local_dev_port
  172.   set env(PILOTRATE) $local_dev_speed
  173.   set env(PILOT_RATE) $local_dev_speed
  174.   set env(PILOTHIGHRATE) $local_dev_speed
  175. }
  176.  
  177.  
  178. # save modem and local device configuration
  179. proc save_devices {} {
  180.   global JETHOME local_dev_port local_dev_speed
  181.   global modem_dev_type modem_dev_str modem_dev_port modem_dev_speed
  182.   global daemon_flag child_pid
  183.  
  184.   set fname $JETHOME/conf/prefs
  185.   set fp [open $fname r]
  186.   set fpw [open $fname.tmp w]
  187.  
  188. # ignore first two lines (PCID, USER)
  189.   gets $fp line
  190.   puts $fpw $line
  191.   gets $fp line
  192.   puts $fpw $line
  193.  
  194. # write values
  195.   puts $fpw "MODEM:$modem_dev_port"
  196.   puts $fpw "MODEMSPEED:$modem_dev_speed"
  197.   puts $fpw "MODEMTYPE:$modem_dev_type"
  198.   puts $fpw "MODEMSTR:$modem_dev_str"
  199.   puts $fpw "LOCAL:$local_dev_port"
  200.   puts $fpw "LOCALSPEED:$local_dev_speed"
  201.   puts $fpw "DAEMON:$daemon_flag:$child_pid"
  202.  
  203.   close $fp
  204.   close $fpw
  205.   file rename -force $fname.tmp $fname
  206.  
  207.   set env(PILOTPORT) $local_dev_port
  208.   set env(PILOT_PORT) $local_dev_port
  209.   set env(PILOTRATE) $local_dev_speed
  210.   set env(PILOT_RATE) $local_dev_speed
  211.   set env(PILOTHIGHRATE) $local_dev_speed
  212. }
  213.  
  214.  
  215. # sub-procedure of installConduit. Given a conduit name, installs
  216. # it onto the current user's conduit definition file
  217. proc insertConduit { name } {
  218.   global JETHOME USER
  219.  
  220.   set CONDUITFILE "$JETHOME/$USER/conf/conduits.def"
  221.   set fp [open $CONDUITFILE r]
  222.   set ok 1
  223.   while {[gets $fp line] >= 0 } {
  224.     if { ![string compare [lindex [split $line ":"] 0] $name]} {
  225.       # entry was found, conduit is alrady installed
  226.       set ok 0
  227.     }
  228.   }
  229.   close $fp
  230.  
  231.   if { $ok } {
  232.     set fp [open $JETHOME/conf/conduits.lst r]
  233.     while {[gets $fp line] >= 0 } {
  234.       if { ![string compare $name [lindex [split $line ":"] 0]]} {
  235.         break
  236.       }
  237.     }
  238.     close $fp
  239.  
  240.     set fp [open $CONDUITFILE a]
  241.     puts $fp "$line"
  242.     close $fp   
  243.     read_defaults
  244.     tk_messageBox -type ok -title "Success"\
  245. -message "Conduit $name has been successfully installed for user \"$USER\"."
  246.   } else {
  247.     tk_messageBox -icon error -type ok -title "Error"\
  248. -message "Conduit $name is already installed for user \"$USER\"."
  249.   }
  250. }
  251.  
  252.  
  253. # master-procedure of insertConduit. Asks for a conduit name
  254. # to be installed
  255. proc installConduit {} {
  256.   global JETHOME USER
  257.  
  258.   set fp [open $JETHOME/conf/conduits.lst r]
  259.   set i 0
  260.   while {[gets $fp line] >= 0 } {
  261.     incr i
  262.     set avail_conduits($i) "$line"
  263.   }
  264.   close $fp
  265.  
  266.   catch {destroy .ins}
  267.   toplevel .ins
  268.   wm resizable .ins 0 0
  269.   wm title .ins "Install conduit..."
  270.  
  271.   frame .ins.top
  272.   frame .ins.bottom
  273.   frame .ins.but
  274.   pack .ins.top -pady 20
  275.   pack .ins.bottom -ipadx 20 -pady 20 -anchor c
  276.   pack .ins.but -anchor c -pady 20
  277.  
  278.   label .ins.top.l \
  279. -text "$USER\n\nPlease select a conduit from the list below:"
  280.   pack .ins.top.l -anchor w
  281.  
  282.   listbox .ins.bottom.l -width 30
  283.   .ins.bottom.l configure -font *-times-*-r-*--*-140-*-*-*-*-*-*
  284.   for {set j 1} {$j <= $i} {incr j} {
  285.     foreach item [lindex [split $avail_conduits($j) ":"] 0] {
  286.       .ins.bottom.l insert end $item
  287.     }
  288.   }
  289.   bind .ins.bottom.l <Double-Button-1> {
  290.     catch {insertConduit [selection get -displayof .ins.bottom.l]}
  291.   }
  292.  
  293.   pack .ins.bottom.l -anchor c
  294.  
  295.   defbutton .ins.but.ins -text "Install" -command {
  296.     catch {insertConduit [selection get -displayof .ins.bottom.l]}
  297.   }
  298.  
  299.   cancelbutton .ins.but.clo -text "Close" -command "destroy .ins"
  300.   pack .ins.but.ins .ins.but.clo -side left -padx 20 -anchor c
  301. }
  302.  
  303.  
  304. # sub-procedure of removeConduit. Given a conduit name, removes
  305. # it from the current user's conduit definition file
  306. proc deleteConduit { name } {
  307.   global JETHOME USER
  308.  
  309.   set CONDUITFILE "$JETHOME/$USER/conf/conduits.def"
  310.   set fp [open $CONDUITFILE r]
  311.   set fpw [open $CONDUITFILE.tmp w]
  312.   set i 0
  313.   set j 0
  314.   while {[gets $fp line] >= 0 } {
  315.     if { [string compare [lindex [split $line ":"] 0] $name]} {
  316.       puts $fpw $line
  317.     } else {
  318.       set i $j
  319.     }
  320.     incr j
  321.   }
  322.   close $fp
  323.   close $fpw
  324.   file rename -force $CONDUITFILE.tmp $CONDUITFILE
  325.  
  326.   read_defaults
  327.   .ins.bottom.l delete $i
  328. }
  329.  
  330.  
  331. # master-procedure of deleteConduit. Asks for a conduit name
  332. # to be removed
  333. proc removeConduit {} {
  334.   global JETHOME USER
  335.  
  336.   set CONDUITFILE "$JETHOME/$USER/conf/conduits.def"
  337.   set fp [open $CONDUITFILE r]
  338.   set i 0
  339.   while {[gets $fp line] >= 0 } {
  340.     incr i
  341.     set avail_conduits($i) "$line"
  342.   }
  343.   close $fp
  344.  
  345.   catch {destroy .ins}
  346.   toplevel .ins
  347.   wm resizable .ins 0 0
  348.   wm title .ins "Remove conduit..."
  349.  
  350.   frame .ins.top
  351.   frame .ins.bottom
  352.   frame .ins.but
  353.   pack .ins.top -pady 20
  354.   pack .ins.bottom -ipadx 20 -pady 20 -anchor c
  355.   pack .ins.but -anchor c -pady 20
  356.  
  357.   label .ins.top.l \
  358. -text "$USER\n\nPlease select a conduit from the list below:"
  359.   pack .ins.top.l -anchor w
  360.  
  361.   listbox .ins.bottom.l -width 30
  362.   .ins.bottom.l configure -font *-times-*-r-*--*-140-*-*-*-*-*-*
  363.   for {set j 1} {$j <= $i} {incr j} {
  364.     foreach item [lindex [split $avail_conduits($j) ":"] 0] {
  365.       .ins.bottom.l insert end $item
  366.     }
  367.   }
  368.   bind .ins.bottom.l <Double-Button-1> {
  369.     catch {deleteConduit [selection get -displayof .ins.bottom.l]}
  370.   }
  371.  
  372.   pack .ins.bottom.l -anchor c
  373.  
  374.   defbutton .ins.but.ins -text "Remove" -command {
  375.     catch {deleteConduit [selection get -displayof .ins.bottom.l]}
  376.   }
  377.  
  378.   cancelbutton .ins.but.clo -text "Close" -command "destroy .ins"
  379.   pack .ins.but.ins .ins.but.clo -side left -padx 20 -anchor c
  380. }
  381.  
  382.  
  383.  
  384. # generates a random number in the range 1..max
  385. proc random { max } {
  386.   global seed
  387.  
  388.   incr seed
  389.   set secs [clock seconds]
  390.   set i [expr [expr $secs * $seed] % $max + 1]
  391.   if { ![regexp {0[8-9]} $secs] } {
  392.     set seed [expr $secs % 10]
  393.   } else {
  394.     set seed [expr [clock format [clock seconds] -format %S]]
  395.   }
  396.   return $i
  397. }
  398.  
  399.  
  400. # sub-procedure of delUser. Given a user name, removes
  401. # it from the jetsync user file
  402. proc removeUser { name } {
  403.   global JETHOME USER
  404.  
  405.   catch {destroy .delete}
  406.   toplevel .delete
  407.   set var [tk_dialog .delete {Confirm} \
  408. "This option removes all of the user's data.\
  409. \n\nAre you sure you wish to remove user $name?" \
  410. {} 1 Yes No]
  411.   destroy .delete   
  412.  
  413. # handle No button (cancel erase)
  414.   if { $var == 1 } return
  415.  
  416.   file delete -force $JETHOME/$name
  417.  
  418.   set fname $JETHOME/conf/jetusers
  419.   set fp [open $fname r]
  420.   set fpw [open $fname.tmp w]
  421.   set i 0
  422.   while {[gets $fp line] >= 0 } {
  423.     if {[string compare [lindex [split $line ":"] 0] $name]} {
  424.       puts $fpw $line
  425.     } else {
  426.      .ins.bottom.l delete $i
  427.     }
  428.     if {[string compare [lindex [split $line ":"] 0] $USER]} {
  429.       incr i
  430.     }
  431.   }
  432.   close $fp
  433.   close $fpw
  434.   file rename -force $fname.tmp $fname
  435. }
  436.  
  437.  
  438. # master-procedure of removeUser. Asks for a user name
  439. # to be removed from the jetsync user file
  440. proc delUser {} {
  441.   global JETHOME USER
  442.  
  443.   catch {destroy .ins}
  444.   toplevel .ins
  445.   wm resizable .ins 0 0
  446.   wm title .ins "Remove user..."
  447.  
  448.   frame .ins.top
  449.   frame .ins.bottom
  450.   frame .ins.but
  451.   pack .ins.top -pady 20 -anchor w -padx 20
  452.   pack .ins.bottom -ipadx 20 -pady 20 -anchor c
  453.   pack .ins.but -anchor c -pady 20
  454.  
  455.   label .ins.top.l \
  456.   -text "Please select the user name to be removed from the list below:" \
  457.   -wraplength 300 -justify left
  458.   pack .ins.top.l -anchor w
  459.  
  460.   listbox .ins.bottom.l -width 30
  461.   .ins.bottom.l configure -font *-times-*-r-*--*-140-*-*-*-*-*-*
  462.  
  463.   pack .ins.bottom.l -anchor c
  464.  
  465.   bind .ins.bottom.l <Double-Button-1> {
  466.     catch {removeUser [selection get -displayof .ins.bottom.l]}
  467.   }
  468.   defbutton .ins.but.ins -text "Remove" -command {
  469.     catch {removeUser [selection get -displayof .ins.bottom.l]}
  470.   }
  471.  
  472.   cancelbutton .ins.but.clo -text "Close" -command "destroy .ins"
  473.   pack .ins.but.ins .ins.but.clo -side left -padx 20 -anchor c
  474.  
  475.   set fp [open $JETHOME/conf/jetusers r]
  476.   while {[gets $fp line] >= 0 } {
  477.     if { [string compare $USER [lindex [split $line ":"] 0]] } {
  478.       .ins.bottom.l insert end [lindex [split $line ":"] 0]
  479.     }
  480.   }
  481.   close $fp
  482. }
  483.  
  484.  
  485. # asks for a username to be added to the jetsync user file
  486. proc addUser {} {
  487.   global JETHOME USER
  488.  
  489.   set data [show_info_dialog "NULL"]
  490.  
  491.   if { ![string compare $data "" ]} {
  492.     wm title . "JetSync - $USER"
  493.     return
  494.   }
  495.  
  496.   set USERNAME [lindex [split $data ":"] 0]
  497.   set PASSWORD [lindex [split $data ":"] 1]
  498.  
  499.   set fp [open $JETHOME/conf/jetusers a]
  500.   puts $fp "$USERNAME:$PASSWORD:[random 999999999]"
  501.   close $fp
  502.   file attributes $JETHOME/conf/jetusers -permissions 0755
  503.  
  504.   file mkdir $JETHOME/$USERNAME
  505.   file mkdir $JETHOME/$USERNAME/conf
  506.   exec install -m 0755 $JETHOME/default/color.def \
  507.     $JETHOME/$USERNAME/conf/color.def
  508.   exec install -m 0755 $JETHOME/default/conduits.def \
  509.     $JETHOME/$USERNAME/conf/conduits.def
  510.  
  511.   foreach i {memos addrs todos i.cal} {
  512.     exec install -m 0755 $JETHOME/default/$i $JETHOME/$USERNAME/$i
  513.   }
  514.  
  515.   set fp [open $JETHOME/$USERNAME/conf/prefs w]
  516.   puts $fp "MODNUM:0"
  517.   close $fp
  518.  
  519.   foreach {i} {jetmemo jetaddr jettodo jetdate} {
  520.     set fp [open $JETHOME/$USERNAME/conf/$i.dat w]
  521.     puts $fp "$JETHOME/$USERNAME"
  522.     close $fp
  523.     file copy -force setup.dir/default/$i.cat \
  524.            $JETHOME/$USERNAME/conf/$i.cat
  525.   }
  526.   set fp [open $JETHOME/$USERNAME/conf/jetmail.dat w]
  527.   close $fp
  528.   set fp [open $JETHOME/$USERNAME/conf/ical.map w]
  529.   close $fp
  530.  
  531.   set fp [open $JETHOME/$USERNAME/hotsync.log w]
  532.   close $fp
  533.  
  534.   changeUser $USERNAME 0
  535. }
  536.  
  537.  
  538. # erases a user's log
  539. proc eraseLog {} {
  540.   global JETHOME USER
  541.  
  542.   catch {destroy .delete}
  543.   toplevel .delete
  544.   set var [tk_dialog .delete {Confirm} "Really erase your log?" {} 1 Yes No]
  545.   destroy .delete   
  546.  
  547. # handle No button (cancel erase)
  548.   if { $var == 1 } return
  549.  
  550. # zeroe logfile
  551.   set fp [open $JETHOME/$USER/hotsync.log w]
  552.   close $fp
  553.   .log.t.text configure -state normal
  554.   .log.t.text delete 1.0 end
  555.   .log.t.text configure -state disabled
  556. }
  557.  
  558.  
  559. # brings up a window showing the hotsync log for the current user
  560. proc viewLog {} {
  561.   global JETHOME USER
  562.  
  563.   catch {destroy .log}
  564.   toplevel .log
  565.   wm resizable .log 0 0
  566.   wm title .log "View log"
  567.  
  568.   frame .log.t
  569.   frame .log.b
  570.   pack .log.t .log.b -pady 10
  571.  
  572.   
  573.   text .log.t.text -yscrollcommand ".log.t.scroll set"
  574.  
  575.   set fp [open $JETHOME/$USER/hotsync.log r]
  576.   while {[gets $fp line] >= 0 } {
  577.     .log.t.text insert end $line
  578.     .log.t.text insert end "\n"
  579.   }
  580.   close $fp
  581.   .log.t.text yview moveto 1.0
  582.  
  583.   scrollbar .log.t.scroll -command ".log.t.text yview"
  584.   pack .log.t.text .log.t.scroll -side left -expand 1 -fill y
  585.  
  586.   cancelbutton .log.b.close -text "Close" -command "destroy .log"
  587.   button .log.b.erase -text "Erase log" -command "eraseLog"
  588.   setupcolor .log.b.close 1
  589.   setupcolor .log.b.erase 1
  590.   .log.t.text configure -state disabled
  591.   pack .log.b.close .log.b.erase -side left -padx 20
  592. }
  593.  
  594.  
  595.  
  596. # changes the current user to a given user name
  597. # Note: flag indicates this proc being called from within the HotSync
  598. #       setup window (so as to update some of its widgets)
  599. proc changeUser { name flag } {
  600.   global USER hsa_conduits JETHOME BACK FORE
  601.  
  602.   if {[string compare $USER "NULL"]} {
  603.     wm title . "JetSync - $name"
  604.   } else {
  605.     wm title . "JetSync"
  606.   }
  607.  
  608.   set USER $name
  609.  
  610.   tcl_change_user $USER
  611.   read_defaults
  612.  
  613.   if {![string compare $USER "NULL"]} {
  614.     source $JETHOME/$USER/conf/color.def
  615.     setColor_helper . "-background" $BACK
  616.     setColor_helper . "-foreground" $FORE
  617.     setColor_helper . "-activeforeground" $FORE
  618.     setColor_helper . "-activebackground" $BACK
  619.   }
  620.  
  621.   if { !$flag } return
  622.  
  623.   .setup.left.list delete 0 end
  624.   foreach item $hsa_conduits {.setup.left.list insert end $item}
  625.  
  626.  
  627.   if {[string compare $USER "NULL"]} {
  628.     .setup.up.list configure -text "$USER"
  629.   } else {
  630.     .setup.up.list configure -text ""
  631.   }
  632. }
  633.  
  634.  
  635. # calls the C code that manages all of the synchronization
  636. # Note: the C function returns the name of the current user which will
  637. #       differ if pilot name and desktop user name differ
  638. proc doHotSyncManager {} {
  639.   set result [HOTSYNCMANAGER]
  640.   if { $result == -1 } {
  641.     tk_messageBox -icon error -type ok -title "Error"\
  642.       -message "Could not establish connection between pilot and desktop."
  643.   } else {
  644.     changeUser $result 0
  645.   }
  646. }
  647.  
  648.  
  649. # shows up a dialog asking for a new user name and password
  650. # Note: used both via C and via tcl/tk
  651. proc show_info_dialog { user } {
  652.   global show_d_path show_d_status new_user new_pass
  653.  
  654.   toplevel .info
  655.   wm title .info "New user..."
  656.   wm geometry .info +329+374
  657.  
  658.   frame .info.f1
  659.   frame .info.f2
  660.   genericbgcolor .info
  661.   genericbgcolor .info.f1
  662.   genericbgcolor .info.f2
  663.  
  664.   label .info.f1.l -text "Username: "
  665.   setupcolor .info.f1.l 0
  666.   if { ![string compare $user "NULL"] } {
  667.     set new_user ""
  668.     entry .info.f1.e -textvariable new_user
  669.   } else {
  670.     set new_user $user
  671.     label .info.f1.e -text "$user" -anchor w
  672.   }
  673.   setupcolor .info.f1.e 0
  674.  
  675.   pack .info.f1 -pady 10 -padx 10 -fill x
  676.   pack .info.f1.l .info.f1.e -anchor w -side left
  677.  
  678.   label .info.f2.l -text "Password: "
  679.   setupcolor .info.f2.l 0
  680.   set new_pass ""
  681.   entry .info.f2.e -textvariable new_pass -show "*"
  682.  
  683.   pack .info.f2 -pady 10 -padx 10 -fill x
  684.   pack .info.f2.l .info.f2.e -anchor w -side left
  685.  
  686.   set show_d_status 0
  687.   defbutton .info.ok -text "Ok" -command {set show_d_status 1}
  688.   genericbgcolor .info.ok
  689.   cancelbutton .info.cnc -text "Cancel" -command {destroy .info; return ""}
  690.   pack .info.ok .info.cnc -pady 10 -padx 10 -side left
  691.   update
  692.  
  693.   tkwait var show_d_status
  694.   destroy .info
  695.   update
  696.  
  697.   if { $show_d_status == 2 } {
  698.     return ""
  699.   } else {
  700.     wm title . "JetSync - $new_user"
  701.     return "$new_user:$new_pass"
  702.   }
  703. }
  704.  
  705.  
  706. proc check_hex { j } {
  707.   if { $j == 10 } { return "A" }
  708.   if { $j == 11 } { return "B" }
  709.   if { $j == 12 } { return "C" }
  710.   if { $j == 13 } { return "D" }
  711.   if { $j == 14 } { return "E" }
  712.   if { $j == 15 } { return "F" }
  713.   return $j
  714. }
  715.  
  716. # calculates the appropriate color for the progress bar in the
  717. # synchronization window
  718. # Note: the color is calculated using Gouraud's coloring algorithm
  719. #       'type' indicates which of the progress bars (they have different
  720. #       colors)
  721. #       'val' indicated the percentage of Gouraud coloring to use
  722. proc calc_color { type val } {
  723.   if { $type == 1 } {
  724.     set calc_red [expr (255 * $val) / 200]
  725.     set calc_green 0
  726.     set calc_blue [expr 255 - (255 * $val) / 200]
  727.   }
  728.   if { $type == 2 } {
  729.     set calc_red [expr (255 * $val) / 200]
  730.     set calc_green [expr 127 + (255 * $val) / 400]
  731.     set calc_blue 0
  732.   }
  733.  
  734.   set i1 [expr $calc_red / 16]
  735.   set i2 [expr $calc_red % 16]
  736.   set j1 [expr $calc_green / 16]
  737.   set j2 [expr $calc_green % 16]
  738.   set k1 [expr $calc_blue / 16]
  739.   set k2 [expr $calc_blue % 16]
  740.  
  741.   set j1 [check_hex $j1]
  742.   set j2 [check_hex $j2]
  743.   set k1 [check_hex $k1]
  744.   set k2 [check_hex $k2]
  745.   set i1 [check_hex $i1]
  746.   set i2 [check_hex $i2]
  747.  
  748.   return "#${i1}${i2}${j1}${j2}${k1}${k2}"
  749. }
  750.  
  751.  
  752. # ensures that the progress dialog is closed
  753. proc killprogress {} {
  754.   after 1000 destroy .prog
  755. }
  756.  
  757.  
  758. # shows/updates the progress bar window (when synchronizing)
  759. proc progress { value value2 text } {
  760.   global BACK FORE anim_x anim_dir anim_tag IMAGEDIR
  761.  
  762. # progress must be called first time with at least value = -1 so that the
  763. # window is created and brought up
  764.   if {$value == -1} {
  765.     destroy .prog
  766.     toplevel .prog
  767.     wm title .prog "Synchronization..."
  768.     center_window .prog 300 280
  769.     set value 0
  770.  
  771.     genericbgcolor .prog
  772.     label .prog.l -text "$text..."
  773.     genericbgcolor .prog.l
  774.     pack .prog.l -pady 30
  775.  
  776.     canvas .prog.c -relief flat -width 300 -height 220 -bd 1
  777.  
  778.     genericbgcolor .prog.c
  779.     pack .prog.c
  780.  
  781. # create two 'new' progress bars
  782.     .prog.c create rect 25 10 225 20 -fill white
  783.     .prog.c create rect 25 70 225 80 -fill white
  784.  
  785. # animation specs
  786.     image create photo l0 -file [file join $IMAGEDIR synch0.gif]
  787.     image create photo l1 -file [file join $IMAGEDIR synch2.gif]
  788.     image create photo l2 -file [file join $IMAGEDIR synch1.gif]
  789.     image create photo l2a -file [file join $IMAGEDIR synch1a.gif]
  790.     label .prog.c.l0 -image l0
  791.     label .prog.c.l1 -image l1
  792.     label .prog.c.l2 -image l2
  793.     .prog.c create window 60 150 -window .prog.c.l1
  794.     .prog.c create window 220 150 -window .prog.c.l2
  795.     set anim_dir 20
  796.  
  797.     update
  798.   }
  799.  
  800.   if { $value != -2 } {
  801.     set pos [expr 25 + $value]
  802.     .prog.l configure -text $text
  803.  
  804. # 1st bar
  805.     .prog.c create rect 25 10 $pos 20 -fill [calc_color 1 $value]
  806.  
  807.     .prog.c create rect 235 5 275 25 -fill white   
  808.     .prog.c create text 255 15 -text "[expr $value / 2]%"
  809.   }
  810.  
  811. # 2nd bar
  812.   if {$value2 == 0} {
  813.     .prog.c create rectangle 25 70 [expr 25 + 100 * 2] 80 -fill white
  814.   }
  815.   .prog.c create rectangle 25 70 [expr 25 + $value2] 80 -fill [calc_color 2 $value2]
  816.  
  817.   .prog.c create rect 235 65 275 85 -fill white   
  818.   .prog.c create text 255 75 -text "[expr $value2 / 2]%"
  819.  
  820.  
  821. # penguin blink
  822.   if { $anim_x >= 120 && $anim_x <= 130 } {
  823.     .prog.c.l2 configure -image l2a
  824.   } else {
  825.     .prog.c.l2 configure -image l2
  826.   }
  827.  
  828. # document icon direction
  829.   if { $anim_x <= 70 } {
  830.     set anim_dir 20
  831.   }
  832.   if { $anim_x >= 194 } { 
  833.     set anim_dir -20
  834.   }
  835.   incr anim_x $anim_dir
  836.  
  837.  
  838. # redraw document icon
  839.   if { $anim_tag } {
  840.     .prog.c delete $anim_tag
  841.   }
  842.   set tag [.prog.c create window $anim_x 150 -window .prog.c.l0]
  843.  
  844.   update
  845.  
  846. # auto-kill of progress dialog when task is complete
  847.   if {$value >= 200} {
  848.     .prog.c create rect 25 10 225 20 -fill black
  849.     exec sleep 1
  850.     destroy .prog
  851.     return
  852.   }
  853. }
  854.  
  855.  
  856. # saves the changes of the coloring
  857. proc save_colors {} {
  858.   global JETHOME BACK FORE USER
  859.  
  860. # change color for main window
  861.   genericbgcolor .mbar
  862.   genericbgcolor .bot.f1
  863.   genericbgcolor .bot.f2
  864.   genericbgcolor .status
  865.   setupcolor .status.l 0
  866.   setupcolor .b1 1
  867.   setupcolor .b2 1
  868.   setupcolor .b3 1
  869.   setupcolor .b4 1
  870.   setupcolor .b5 1
  871.   setupcolor .b6 1
  872.   setupcolor .mbar.setup 1
  873.   setupcolor .mbar.config 1
  874.   setupcolor .mbar.tools 1
  875.  
  876.   setupcolor .mbar.setup.menu 1
  877.   setupcolor .mbar.config.menu 1
  878.   setupcolor .mbar.tools.menu 1
  879.  
  880.  
  881. # save to color def file
  882.   set fp [open $JETHOME/$USER/conf/color.def w]
  883.  
  884.   puts $fp "set BACK $BACK"
  885.   puts $fp "set FORE $FORE"
  886.   puts $fp ""
  887.   puts $fp "proc genericbgcolor { w } {"
  888.   puts $fp "global BACK FORE"
  889.   puts $fp "\$w configure -bg \$BACK"
  890.   puts $fp "\$w configure -bd 1"
  891.   puts $fp "}"
  892.   puts $fp ""
  893.   puts $fp "proc setupcolor { w active } {"
  894.   puts $fp "global BACK FORE"
  895.   puts $fp "\$w configure -bg \$BACK -fg \$FORE"
  896.   puts $fp "if { \$active } {"
  897.   puts $fp "  \$w configure -activebackground \$BACK -activeforeground \$FORE"
  898.   puts $fp "}"
  899.   puts $fp ""
  900.   puts $fp "\$w configure -font *-times-*-r-*--*-140-*-*-*-*-*-*"
  901.   puts $fp "\$w configure -bd 1"
  902.   puts $fp "}"
  903.  
  904.   close $fp
  905. }
  906.  
  907.  
  908. # sub-procedure of config_password
  909. proc chpass.ok {} {
  910.   global chpass_old chpass_new USER JETHOME
  911.  
  912.   set fname $JETHOME/conf/jetusers
  913.   set fp [open $fname r]
  914.   set fpw [open $fname.tmp w]
  915.   while {[gets $fp line] >= 0 } {
  916.     set t_user [lindex [split $line ":"] 0]
  917.     if {[string compare $t_user $USER]} {
  918.       puts $fpw $line
  919.     } else {
  920.       set t_pass [lindex [split $line ":"] 1]
  921.       if {![string compare $t_pass $chpass_old]} {
  922.         set t_uid [lindex [split $line ":"] 2]
  923.         puts $fpw "$t_user:$chpass_new:$t_uid"
  924.       } else {
  925.         tk_messageBox -type ok -icon error -title "Password failed"\
  926.           -message "Incorrect password."
  927.         puts $fpw $line
  928.       }
  929.     }
  930.   }
  931.   close $fp
  932.   close $fpw
  933.  
  934.   file rename -force $fname.tmp $fname
  935.  
  936.   set chpass_old ""
  937.   set chpass_new ""
  938.   destroy .chpass
  939. }
  940.  
  941.  
  942. # configures the password for private records, for this user
  943. proc config_password {} {
  944.   set w .chpass
  945.   catch {destroy $w}
  946.   toplevel $w
  947.   wm title $w "Set password for private records"
  948.   wm iconname $w "Password"
  949.   wm geometry $w +337+201
  950.  
  951.   frame $w.f1
  952.   frame $w.f2
  953.   frame $w.f3
  954.   pack $w.f1 $w.f2 -pady 15
  955.   pack $w.f3 -pady 10
  956.   genericbgcolor $w
  957.   genericbgcolor $w.f1
  958.   genericbgcolor $w.f2
  959.   genericbgcolor $w.f3
  960.  
  961.   label $w.f1.l -text "Old password: "
  962.   setupcolor $w.f1.l 0
  963.   entry $w.f1.e -textvariable chpass_old -show "*"
  964.   genericbgcolor $w.f1.e
  965.  
  966.   label $w.f2.l -text "New password: "
  967.   setupcolor $w.f2.l 0
  968.   entry $w.f2.e -textvariable chpass_new -show "*"
  969.   genericbgcolor $w.f2.e
  970.  
  971.   pack $w.f1.l $w.f1.e -side left
  972.   pack $w.f2.l $w.f2.e -side left
  973.  
  974.   defbutton $w.f3.ok -text "Ok" -command "chpass.ok"
  975.   cancelbutton $w.f3.cancel -text "Cancel" -command "destroy .chpass"
  976.   setupcolor $w.f3.ok 1
  977.   setupcolor $w.f3.cancel 1
  978.   pack $w.f3.ok $w.f3.cancel -side left -padx 10
  979. }
  980.  
  981.  
  982. # brings up a color picker dialog where user can choose the colors
  983. # to be used in the program
  984. proc config_js_colors {} {
  985.   global FORE BACK
  986.  
  987.   set w .clrpick
  988.   catch {destroy $w}
  989.   toplevel $w
  990.   wm title $w "Color Selection Dialog"
  991.   wm iconname $w "colors"
  992.   wm geometry $w +337+201
  993.  
  994.   frame $w.buttons
  995.   pack $w.buttons -side bottom -fill x -pady 2m
  996.   cancelbutton $w.buttons.dismiss -text Close \
  997.     -command "save_colors; calc_Palette; destroy $w"
  998.  
  999.   pack $w.buttons.dismiss -side left -expand 1
  1000.  
  1001.   button $w.back -text "Set background color ..." \
  1002.     -command \
  1003.     "setColor $w $w.back background {-background -highlightbackground}"
  1004.   button $w.fore -text "Set foreground color ..." \
  1005.     -command \
  1006.     "setColor $w $w.back foreground -foreground"
  1007.   button $w.default -text "Set default colors" -command {
  1008.     set BACK Bisque3; set FORE Tan4
  1009.     setColor_helper . "-background" $BACK
  1010.     setColor_helper . "-foreground" $FORE }
  1011.   setupcolor $w.default 1
  1012.   setupcolor $w.back 1
  1013.   setupcolor $w.fore 1
  1014.   setupcolor $w.buttons.dismiss 1
  1015.  
  1016.   setColor_helper $w "-background" $BACK
  1017.   setColor_helper $w "-foreground" $FORE
  1018.   setColor_helper $w.buttons "-background" $BACK
  1019.   setColor_helper $w.buttons "-foreground" $FORE
  1020.   setColor_helper $w.back "-background" $BACK
  1021.   setColor_helper $w.back "-foreground" $FORE
  1022.   setColor_helper $w.fore "-background" $BACK
  1023.   setColor_helper $w.fore "-foreground" $FORE
  1024.   setColor_helper $w.default "-background" $BACK
  1025.   setColor_helper $w.default "-foreground" $FORE
  1026.  
  1027.   pack $w.back $w.fore -side top -anchor c -pady 2m
  1028.   pack $w.default -side top -anchor c -pady 5m
  1029. }
  1030.  
  1031.  
  1032. # handles the changes of the colors user chose and applies them
  1033. proc setColor {w button name options} {
  1034.     global BACK FORE
  1035.  
  1036.     grab $w
  1037.     set initialColor [$button cget -$name]
  1038.  
  1039.     set color [tk_chooseColor -title "Choose a $name color" -parent $w \
  1040.         -initialcolor $initialColor]
  1041.  
  1042.     if {![string compare $name "background"]} {
  1043.       if {[string compare $color ""]} {
  1044.         set BACK $color
  1045.       }
  1046.     }
  1047.     if {![string compare $name "foreground"]} {
  1048.       if {[string compare $color ""]} {
  1049.         set FORE $color
  1050.       }
  1051.     }
  1052.  
  1053.     if [string compare $color ""] {
  1054.         setColor_helper $w $options $color
  1055.     }
  1056.     grab release $w
  1057. }
  1058.  
  1059.  
  1060. # handles the changes of the colors user chose and applies them
  1061. proc setColor_helper {w options color} {
  1062.     foreach option $options {
  1063.         catch {
  1064.             $w config $option $color
  1065.         }
  1066.     }
  1067.     foreach child [winfo children $w] {   
  1068.         setColor_helper $child $options $color
  1069.     }
  1070. }
  1071.  
  1072.  
  1073.  
  1074. # brings up a help window
  1075. # Note: UNIMPLEMENTED
  1076. proc do_help { item } {
  1077.   global JETHOME
  1078.  
  1079.   catch { exec $JETHOME/bin/help.tcl $item }
  1080. }
  1081.  
  1082.  
  1083. # read data saved in files concerning hotsync options
  1084. proc init_hsa_conduits {} {
  1085.   global JETHOME CONDUIT_FILE hsa_conduits USER
  1086.  
  1087.   if {[string compare $USER "NULL"]} {
  1088.     set fp [open $JETHOME/$USER/conf/$CONDUIT_FILE r]
  1089.   } else {
  1090.     set fp [open $JETHOME/default/$CONDUIT_FILE r]
  1091.   }
  1092.   while {[gets $fp line] >= 0 } {
  1093.     lappend hsa_conduits [lindex [split $line ":"] 0]
  1094.   }
  1095.   close $fp
  1096. }
  1097.  
  1098.  
  1099. # retrieves a list of currently installed users
  1100. proc getusers {} {
  1101.   global JETHOME JETUSERS_FILE
  1102.  
  1103.   set fp [open $JETHOME/conf/$JETUSERS_FILE r]
  1104.   set getusers_ret ""
  1105.   while {[gets $fp line] >= 0 } {
  1106.     lappend getusers_ret [lindex [split $line ":"] 0]
  1107.   }
  1108.   close $fp
  1109.   return $getusers_ret
  1110. }
  1111.  
  1112.                          ### Generic procedures ###
  1113.  
  1114. # handle close button in HotSync action dialog
  1115. proc closehsa { } {
  1116.   global hotsync_opt curhsaopt
  1117.   destroy .changehsa
  1118.  
  1119.   setHotSyncPrefs $hotsync_opt $curhsaopt 1
  1120. }
  1121.  
  1122.  
  1123. # brings up HotSync action dialog
  1124. proc dochangehotsync {} {
  1125.   global curhsaopt hotsync_opt
  1126.  
  1127.   if { ! [string compare $hotsync_opt "(undefined)"]} { return }
  1128.  
  1129.   set curhsaopt [getHotSyncPrefs $hotsync_opt]
  1130.  
  1131.   catch {destroy .changehsa}
  1132.   toplevel .changehsa
  1133.   wm title .changehsa "Change HotSync Action"
  1134.   wm geometry .changehsa +337+201
  1135.   frame .changehsa.top
  1136.   frame .changehsa.left
  1137.   frame .changehsa.leftest
  1138.   frame .changehsa.right
  1139.  
  1140.   genericbgcolor .changehsa
  1141.   genericbgcolor .changehsa.top
  1142.   genericbgcolor .changehsa.left
  1143.   genericbgcolor .changehsa.leftest
  1144.   genericbgcolor .changehsa.right
  1145.  
  1146.   label .changehsa.top.l1 -text "HotSync action for $hotsync_opt" -anchor w
  1147.   setupcolor .changehsa.top.l1 0
  1148.   pack .changehsa.top.l1 -side left -fill x -expand 1
  1149.  
  1150.   radiobutton .changehsa.left.r1 -width 40 -text "Synchronize the files" -variable curhsaopt -value 1 -anchor w
  1151.   radiobutton .changehsa.left.r2 -text "Desktop to PalmPilot" -variable curhsaopt -value 2 -anchor w
  1152.   radiobutton .changehsa.left.r3 -text "PalmPilot to desktop" -variable curhsaopt -value 3 -anchor w
  1153.   radiobutton .changehsa.left.r4 -text "Do nothing" -variable curhsaopt -value 4 -anchor w
  1154.  
  1155.   if { $hotsync_opt == "Install" } {
  1156.     .changehsa.left.r1 configure -state disabled
  1157.     .changehsa.left.r3 configure -state disabled
  1158.   }
  1159.  
  1160.   setupcolor .changehsa.left.r1 1
  1161.   setupcolor .changehsa.left.r2 1
  1162.   setupcolor .changehsa.left.r3 1
  1163.   setupcolor .changehsa.left.r4 1
  1164.  
  1165.   label .changehsa.leftest.l1 -image imagehotsync -bd 0
  1166.   pack .changehsa.leftest.l1
  1167.  
  1168.   pack .changehsa.left.r1 .changehsa.left.r2 .changehsa.left.r3 .changehsa.left.r4 -expand 1 -fill x -pady 10
  1169.  
  1170.   pack .changehsa.top -side top -fill x -expand 1
  1171.   pack .changehsa.leftest .changehsa.left .changehsa.right -side left
  1172.  
  1173.   defbutton .changehsa.right.ok -text "Ok" -command "closehsa"
  1174.   cancelbutton .changehsa.right.cancel -text "Cancel" -command "destroy .changehsa"
  1175.   button .changehsa.right.help -text "Help" -command "do_help 1"
  1176.  
  1177.   setupcolor .changehsa.right.ok 1
  1178.   setupcolor .changehsa.right.cancel 1
  1179.   setupcolor .changehsa.right.help 1
  1180.  
  1181.   pack .changehsa.right.ok .changehsa.right.cancel .changehsa.right.help -padx 10 -fill x -pady 10
  1182. }
  1183.  
  1184.  
  1185. # reads all hotsync options and preferences
  1186. proc read_defaults {} {
  1187.   global hsa_conduits USER
  1188.  
  1189.   set hsa_conduits ""
  1190.   init_hsa_conduits
  1191.   initHotSyncPrefs $USER
  1192. }
  1193.  
  1194.  
  1195. # brings up the HotSync dialogs according to 'param'
  1196. proc setup { param } {
  1197.   global hsa_conduits hotsync_opt USER
  1198.   global local_dev_port local_dev_speed
  1199.   global modem_dev_type modem_dev_str modem_dev_port modem_dev_speed
  1200.   global daemon_flag
  1201.  
  1202.   catch {destroy .setup}
  1203.   toplevel .setup
  1204.   wm geometry .setup +306+128
  1205.  
  1206.   frame .setup.bottom
  1207.   genericbgcolor .setup
  1208.   genericbgcolor .setup.bottom
  1209.  
  1210.   set hotsync_opt "(undefined)"
  1211.  
  1212.   case $param {
  1213.     HotSync {
  1214.       wm title .setup "HotSync - Setup"
  1215.       frame .setup.up
  1216.       frame .setup.left
  1217.       frame .setup.right
  1218.  
  1219.       pack .setup.up -fill x
  1220.       pack .setup.left -side left -pady 10
  1221.       pack .setup.right -side left -padx 10 -pady 10
  1222.  
  1223.       genericbgcolor .setup.left
  1224.       genericbgcolor .setup.right
  1225.       genericbgcolor .setup.up
  1226.  
  1227.       label .setup.up.label -text "Current user:"
  1228.       menubutton .setup.up.list -text "$USER" -indicatoron 1 \
  1229.         -direction below -menu .setup.up.list.m -relief raised -width 20
  1230.       setupcolor .setup.up.list 1
  1231.  
  1232.       menu .setup.up.list.m -tearoff 0 
  1233.       setupcolor .setup.up.list.m 1
  1234.       foreach item [getusers] {
  1235.         .setup.up.list.m add command -label $item \
  1236. -command "changeUser \"$item\" 1 ; \
  1237. .setup.right.b2 configure -state disabled"
  1238.       }
  1239.       pack .setup.up.label .setup.up.list -side left -pady 10
  1240.  
  1241.       listbox .setup.left.list -width 60
  1242.       .setup.left.list configure -font *-times-*-r-*--*-140-*-*-*-*-*-*
  1243.  
  1244.       setupcolor .setup.left.list 0
  1245.  
  1246.       pack .setup.left.list
  1247.       foreach item $hsa_conduits {.setup.left.list insert end $item}
  1248.       bind .setup.left.list <ButtonRelease-1> {
  1249.         set hotsync_opt [selection get]
  1250.         .setup.right.b2 configure -state normal
  1251.       }
  1252.       bind .setup.left.list <Double-Button-1> {
  1253.         set hotsync_opt [selection get]
  1254.         dochangehotsync
  1255.       }
  1256.  
  1257.       button .setup.right.b1 -text "Done" -command {destroy .setup
  1258.         source $JETHOME/$USER/conf/color.def
  1259.         update
  1260.         tk_setPalette \
  1261.           foreground $FORE background $BACK \
  1262.           activeforeground $FORE activebackground $BACK
  1263.       }
  1264.       button .setup.right.b2 -text "Change..." -command "dochangehotsync"
  1265.  
  1266.       .setup.right.b2 configure -state disabled
  1267.       button .setup.right.b3 -text "Help" -command "do_help 2"
  1268.  
  1269.       setupcolor .setup.right.b1 1
  1270.       setupcolor .setup.right.b2 1
  1271.       setupcolor .setup.right.b3 1
  1272.  
  1273.       pack .setup.right.b1 .setup.right.b2 .setup.right.b3 -fill x -pady 5
  1274.  
  1275.       return
  1276.     }
  1277.     General {
  1278.       wm title .setup "HotSync - Manager setup"
  1279.       frame .setup.f0
  1280.       frame .setup.f1
  1281.  
  1282.       genericbgcolor .setup.f0
  1283.       genericbgcolor .setup.f1
  1284.  
  1285.       label .setup.f0.l1 -text "HotSync Manager..."
  1286.       setupcolor .setup.f0.l1 0
  1287.  
  1288.       radiobutton .setup.f1.l1 -variable daemon_flag -value 0 \
  1289.       -text "Always available" -anchor w
  1290.       radiobutton .setup.f1.l2 -variable daemon_flag -value 1 \
  1291.       -text "Only when JetSync is running" -anchor w
  1292.       radiobutton .setup.f1.l3 -variable daemon_flag -value 2 \
  1293.       -text "Manual" -anchor w
  1294.  
  1295.       setupcolor .setup.f1.l1 1
  1296.       setupcolor .setup.f1.l2 1
  1297.       setupcolor .setup.f1.l3 1
  1298.  
  1299.       pack .setup.f0 .setup.f1 -anchor w -pady 5
  1300.       pack .setup.f0.l1 -fill x
  1301.       pack .setup.f1.l1 .setup.f1.l2 .setup.f1.l3 -fill x
  1302.     }
  1303.     Local {
  1304.       wm title .setup "HotSync - Local setup"
  1305.       frame .setup.up
  1306.       frame .setup.dn
  1307.  
  1308.       genericbgcolor .setup.up
  1309.       genericbgcolor .setup.dn
  1310.  
  1311.       label .setup.up.l1 -text "Serial Port"
  1312.  
  1313.       entry .setup.up.e1 -textvariable local_dev_port
  1314.       label .setup.dn.l2 -text "Speed"
  1315.       entry .setup.dn.e2 -textvariable local_dev_speed
  1316.  
  1317.       setupcolor .setup.up.l1 0
  1318.       setupcolor .setup.up.e1 0
  1319.       setupcolor .setup.dn.l2 0
  1320.       setupcolor .setup.dn.e2 0
  1321.  
  1322.       pack .setup.up .setup.dn -side top
  1323.       pack .setup.up.l1 .setup.up.e1 -side left -fill x
  1324.       pack .setup.dn.l2 .setup.dn.e2 -side left -fill x
  1325.     }
  1326.     Modem {
  1327.       wm title .setup "HotSync - Modem setup"
  1328.       frame .setup.f1
  1329.       frame .setup.f2
  1330.       frame .setup.f3
  1331.       frame .setup.f4
  1332.  
  1333.       genericbgcolor .setup.f1
  1334.       genericbgcolor .setup.f2
  1335.       genericbgcolor .setup.f3
  1336.       genericbgcolor .setup.f4
  1337.  
  1338.       label .setup.f1.l1 -text "Serial Port"
  1339.       entry .setup.f1.e1 -textvariable modem_dev_port
  1340.       label .setup.f2.l2 -text "Speed"
  1341.       entry .setup.f2.e2 -textvariable modem_dev_speed
  1342.       label .setup.f3.l3 -text "Modem"
  1343.       entry .setup.f3.e3 -textvariable modem_dev_type
  1344.       label .setup.f4.l4 -text "Setup String"
  1345.       entry .setup.f4.e4 -textvariable modem_dev_str
  1346.  
  1347.       setupcolor .setup.f1.l1 0
  1348.       setupcolor .setup.f1.e1 0
  1349.       setupcolor .setup.f2.l2 0
  1350.       setupcolor .setup.f2.e2 0
  1351.       setupcolor .setup.f3.l3 0
  1352.       setupcolor .setup.f3.e3 0
  1353.       setupcolor .setup.f4.l4 0
  1354.       setupcolor .setup.f4.e4 0
  1355.  
  1356.       pack .setup.f1 .setup.f2 .setup.f3 .setup.f4
  1357.       pack .setup.f1.l1 .setup.f1.e1 -side left -fill x
  1358.       pack .setup.f2.l2 .setup.f2.e2 -side left -fill x
  1359.       pack .setup.f3.l3 .setup.f3.e3 -side left -fill x
  1360.       pack .setup.f4.l4 .setup.f4.e4 -side left -fill x
  1361.     }
  1362.   }
  1363.  
  1364.   pack .setup.bottom -side top
  1365.   defbutton .setup.bottom.ok -text "Ok" -command "save_devices; destroy .setup"
  1366.   cancelbutton .setup.bottom.cancel -text "Cancel" -command "load_devices; destroy .setup"
  1367.   button .setup.bottom.help -text "Help" -command "do_help 3"
  1368.  
  1369.   if {![string compare $param "General"]} {
  1370.     .setup.bottom.help configure -command "do_help 4"
  1371.   }
  1372.  
  1373.   setupcolor .setup.bottom.ok 1
  1374.   setupcolor .setup.bottom.cancel 1
  1375.   setupcolor .setup.bottom.help 1
  1376.  
  1377.   pack .setup.bottom.ok .setup.bottom.cancel .setup.bottom.help -side left -pady 10
  1378. }
  1379.  
  1380.  
  1381. # runs the built-in application defined by 'appname'
  1382. proc dotask {appname button} {
  1383.   global USER JETHOME
  1384.   update
  1385.  
  1386.   $button configure -relief sunken
  1387.   update
  1388.  
  1389.   if {[string compare $appname "ical"]} {
  1390.     catch { exec $appname "$USER" -geometry +100+100 } var
  1391.   } else {
  1392.   # read iCal data file location
  1393.     set fp [open $JETHOME/$USER/conf/jetdate.dat r]
  1394.     gets $fp DATADIR
  1395.     close $fp
  1396.  
  1397.     catch { exec $appname -calendar $DATADIR/i.cal -geometry +100+100 } var
  1398.   }
  1399.  
  1400.   $button configure -relief raised
  1401. }
  1402.  
  1403.  
  1404.                               ### INIT stuff ###
  1405.  
  1406. update_splash Initializing
  1407.  
  1408. load_devices
  1409. source $JETHOME/conf/button.def
  1410.  
  1411. read_defaults
  1412. setHotSyncPrefs NULL 0 0
  1413.  
  1414. frame .mbar -relief raised -bd 2
  1415. frame .bot
  1416. frame .bot.f1
  1417. frame .bot.f2
  1418. frame .status -width 100
  1419.  
  1420.  
  1421. genericbgcolor .mbar
  1422. genericbgcolor .bot
  1423. genericbgcolor .bot.f1
  1424. genericbgcolor .bot.f2
  1425. genericbgcolor .status
  1426.  
  1427. update_splash "Loading widgets"
  1428.  
  1429. image create photo palmcopy -file [file join $IMAGEDIR ping.gif]
  1430. image create photo imagetodo -file [file join $IMAGEDIR todo.gif]
  1431. image create photo imagememo -file [file join $IMAGEDIR memo.gif]
  1432. image create photo imageaddr -file [file join $IMAGEDIR addr.gif]
  1433. image create photo imagedate -file [file join $IMAGEDIR date.gif]
  1434. image create photo imagehotsync -file [file join $IMAGEDIR hotsync.gif]
  1435.  
  1436. label .b0 -image palmcopy -anchor w -bd 0
  1437. button .b1 -image imagetodo -command "dotask $JETHOME/bin/jettodo .b1" -anchor w
  1438. button .b2 -image imagememo -command "dotask $JETHOME/bin/jetmemo .b2" -anchor w
  1439. button .b3 -image imageaddr -command "dotask $JETHOME/bin/jetaddr .b3" -anchor w
  1440. button .b4 -image imagedate -command "dotask ical .b4" -anchor w
  1441. button .b5 -text "Synchronize" -command "doHotSyncManager"
  1442. if { $daemon_flag != 2 } {
  1443.   .b5 configure -state disabled
  1444. } else {
  1445.   bind .b5 <Enter> {
  1446.     .status.l config -text "Perform synchronization"
  1447.   }
  1448.   bind .b5 <Leave> {
  1449.     .status.l config -text ""
  1450.   }
  1451. }
  1452.  
  1453. button .b6 -text "Quit" -command "quit"
  1454. bind .b6 <Enter> {
  1455.   .status.l config -text "Exit JetSync"
  1456. }
  1457. bind .b6 <Leave> {
  1458.   .status.l config -text ""
  1459. }
  1460.  
  1461. label .status.l -text "" -anchor w
  1462. setupcolor .status.l 0
  1463. pack .status.l -anchor w
  1464.  
  1465. bind .b1 <Enter> {
  1466.   .status.l config -text "JetTodo"
  1467. }
  1468. bind .b2 <Enter> {
  1469.   .status.l config -text "JetMemo"
  1470. }
  1471. bind .b3 <Enter> {
  1472.   .status.l config -text "JetAddr"
  1473. }
  1474. bind .b4 <Enter> {
  1475.   .status.l config -text "iCal"
  1476. }
  1477. bind .b1 <Leave> {
  1478.   .status.l config -text ""
  1479. }
  1480. bind .b2 <Leave> {
  1481.   .status.l config -text ""
  1482. }
  1483. bind .b3 <Leave> {
  1484.   .status.l config -text ""
  1485. }
  1486. bind .b4 <Leave> {
  1487.   .status.l config -text ""
  1488. }
  1489.  
  1490. setupcolor .b1 1
  1491. setupcolor .b2 1
  1492. setupcolor .b3 1
  1493. setupcolor .b4 1
  1494. setupcolor .b5 1
  1495. setupcolor .b6 1
  1496.  
  1497. update_splash "Setting up menus"
  1498.  
  1499. menubutton .mbar.setup -text HotSync -menu .mbar.setup.menu
  1500. menu .mbar.setup.menu -tearoff 0
  1501. .mbar.setup.menu add command -label "Manager setup..." -command "setup General"
  1502. .mbar.setup.menu add command -label "Local setup..." -command "setup Local"
  1503. .mbar.setup.menu add command -label "Modem setup..." -command "setup Modem"
  1504. .mbar.setup.menu add separator
  1505. .mbar.setup.menu add command -label "Setup..." -command "setup HotSync"
  1506. .mbar.setup.menu add separator
  1507. .mbar.setup.menu add command -label "View log..." -command "viewLog"
  1508.  
  1509. bind .mbar.setup <Enter> {
  1510.   .status.l config -text "HotSync configuration"
  1511. }
  1512. bind .mbar.setup <Leave> {
  1513.   .status.l config -text ""
  1514. }
  1515.  
  1516.  
  1517. menubutton .mbar.config -text Configure -menu .mbar.config.menu
  1518. menu .mbar.config.menu -tearoff 0
  1519. .mbar.config.menu add command -label "Add user..." -command "addUser"
  1520. .mbar.config.menu add command -label "Remove user..." -command "delUser"
  1521. .mbar.config.menu add command -label "Change password..." \
  1522. -command "config_password"
  1523. .mbar.config.menu add separator
  1524. .mbar.config.menu add command -label "Configure JetSync colors" \
  1525. -command "config_js_colors"
  1526.  
  1527. bind .mbar.config <Enter> {
  1528.   .status.l config -text "User configuration"
  1529. }
  1530. bind .mbar.config <Leave> {
  1531.   .status.l config -text ""
  1532. }
  1533.  
  1534. menubutton .mbar.tools -text Conduits -menu .mbar.tools.menu
  1535. menu .mbar.tools.menu -tearoff 0
  1536. .mbar.tools.menu add command -label "Install conduit..." \
  1537. -command "installConduit"
  1538. .mbar.tools.menu add command -label "Remove conduit..." \
  1539. -command "removeConduit"
  1540.  
  1541. bind .mbar.tools <Enter> {
  1542.   .status.l config -text "Select which conduits you wish to use"
  1543. }
  1544. bind .mbar.tools <Leave> {
  1545.   .status.l config -text ""
  1546. }
  1547.  
  1548. setupcolor .mbar.setup 1
  1549. setupcolor .mbar.config 1
  1550. setupcolor .mbar.tools 1
  1551.  
  1552. setupcolor .mbar.setup.menu 1
  1553. setupcolor .mbar.config.menu 1
  1554. setupcolor .mbar.tools.menu 1
  1555.  
  1556.  
  1557.                         ### End splash screen ###
  1558. destroy .stop .sbottom .sbottom2
  1559.  
  1560.  
  1561.                         ### Pack main window ###
  1562. pack .mbar -side top -fill x
  1563. pack .mbar.setup .mbar.config .mbar.tools \
  1564. -in .mbar -side left
  1565.  
  1566.  
  1567. pack .bot
  1568. pack .bot.f1 .bot.f2 -side left
  1569.  
  1570. genericbgcolor .status
  1571. pack .status -fill x -expand 1 -anchor s
  1572.  
  1573. pack .b0 -in .bot.f1 -padx 20 -side left -pady 10m
  1574. pack .b1 .b2 .b3 .b4 -in .bot.f1 -side left
  1575. pack .b5 .b6 -in .bot.f2 -padx 20 -pady 5 -fill both -expand 1
  1576.  
  1577. bind . <Destroy> quit
  1578.  
  1579. center_window . 477 172
  1580.